/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package USECASE;

import BO.Adresse;
import BO.Employe;
import BO.EmployeExterne;
import BO.EmployeInterne;
import BO.Role;
import BO.ZoneGeographique;
import ERRORS.LoginException;
import UTIL.Util;
/**
 *
 * @author olivierm
 */
public class UC_GestionSYS {

    
    //*******************************************************************
    //Constructeurs
    //******************************************************************* 
    
    private static UC_GestionSYS instance;
    
    private UC_GestionSYS(){
        
    }
    
    public static UC_GestionSYS getInstance(){
        if(instance == null) {
            instance = new UC_GestionSYS();
        }
        return instance;
    }

    //*******************************************************************
    //Méthode d'instance
    //******************************************************************* 
    
    /**
     * Méthode permettant de créer un nouvel employé Interne (Secrétaire, chef d'équipe, Direction, SYS)
     * @author olivierm
     * @param matricule
     * @param password
     * @param nom
     * @param prenom
     * @param rue
     * @param numero
     * @param cp
     * @param ville
     * @param numZoneGeo
     * @param gestion_clients
     * @param gestion_Direction
     * @param gestion_Interventions
     * @param gestion_OnSite
     * @param gestion_Planning
     * @param gestion_SYS
     * @return
     */
     public synchronized void creerEmployeInterne(String matricule, String password,String nom, String prenom, String rue, int numero, int cp, String ville, int numZoneGeo, 
                                        boolean gestion_clients, boolean gestion_Direction, boolean gestion_Interventions, boolean gestion_OnSite,
                                        boolean gestion_Planning, boolean gestion_SYS) throws IllegalArgumentException{
         
             Util.checkString(matricule);
             Util.checkString(password);
             Util.checkString(nom);
             Util.checkString(prenom);
             
             ZoneGeographique zoneGeo = new ZoneGeographique(numZoneGeo);
             Adresse adresse = new Adresse(rue, numero, cp, ville, zoneGeo);            
             Role role = new Role(gestion_clients, gestion_Interventions, gestion_Planning, gestion_Direction, gestion_OnSite, gestion_SYS);
            
             new EmployeInterne(nom, prenom, adresse, matricule, password, role);

     }
     
     /**
      * Méthode permettant de créer un nouvel employé Externe (technicien)
      * @author olivierm
      * @param matricule
      * @param password
      * @param nom
      * @param prenom
      * @param rue
      * @param numero
      * @param cp
      * @param ville
      * @param numZoneGeo
      * @param numZoneAssignee
      * @param gestion_clients
      * @param gestion_Direction
      * @param gestion_Interventions
      * @param gestion_OnSite
      * @param gestion_Planning
      * @param gestion_SYS
      * @return
      */
     public synchronized void creerEmployeExterne(String matricule, String password,String nom, String prenom, 
                                        String rue, int numero, int cp, String ville, int numZoneGeo, int numZoneAssignee,
                                        boolean gestion_clients, boolean gestion_Direction, boolean gestion_Interventions, boolean gestion_OnSite,
                                        boolean gestion_Planning, boolean gestion_SYS) throws IllegalArgumentException{
         
             Util.checkString(matricule);
             Util.checkString(password);
             Util.checkString(nom);
             Util.checkString(prenom);   
             
             ZoneGeographique zoneGeo = new ZoneGeographique(numZoneGeo);            
             ZoneGeographique zoneGeoAssignee = new ZoneGeographique(numZoneAssignee);             
             Adresse adresse = new Adresse(rue, numero, cp, ville, zoneGeo);            
             Role role = new Role(gestion_clients, gestion_Interventions, gestion_Planning, gestion_Direction, gestion_OnSite, gestion_SYS);
            
             new EmployeExterne(nom, prenom, adresse, matricule, password, zoneGeoAssignee, role);
     }    

     public synchronized EmployeInterne loginInterne(String matricule, String password) throws LoginException{
         EmployeInterne employe;   
         try{ 
                DAL.AbstractFactory.getInstance().getEmployeDao().loginInterne(matricule, password);
                employe = new EmployeInterne(matricule);
        }catch(LoginException ex){
                throw new LoginException(ex);
        }
        return employe;  
     }
     
     public synchronized EmployeExterne loginExterne(String matricule, String password)throws LoginException{
         EmployeExterne employe;   
         try{ 
                DAL.AbstractFactory.getInstance().getEmployeDao().loginInterne(matricule, password);
                employe = new EmployeExterne(matricule);
        }catch(LoginException ex){
                throw new LoginException(ex);
        }
        return employe;           
            
         
     }
     
    //*******************************************************************
    //Méthode de classe
    //*******************************************************************     
}
